/* 
  创建一个 HTTP 服务,端口为 9000,满足如下的需求:
  GET /index.html        响应  page/index.html 的文件内容
  GET /css/aap.css       响应  page/css/app.css 的文件内容
  GET /images.login.ong  响应  page/images/login.png 的文件内容
 */

// 导入http模块
const http = require("http");
// 导入fs 模块 将table.html中的内容 读出来写在response中
const fs = require("fs");
const path = require("path");
// 声明一个变量
let mimes = {
  html: "text/html",
  css: "text/css",
  js: "text/javascript",
  png: "image/png",
  jpg: "image/jpeg",
  gif: "image/gif",
  mp4: "video/mp4",
  mp3: "audio/mpeg",
  json: "application/json",
};

// 创建http服务对象
const server = http.createServer((request, response) => {
  // 前端发请求,后端获取url路径 拼接为静态资源路  再读取其文件内容返回给前端
  if (request.method !== "GET") {
    response.statusCode = 405;
    response.end("<h1>405 Method Not Allowed</h1>");
    return;   
  }
  // 获取请求url 的路径
  let { pathname } = new URL(request.url, "http://127.0.0.1:80");
  // 声明一个变量为网站根目录
  let root = __dirname + "/page";
  // 拼接文件路径  filePath: 为静态资源路径
  let filePath = root + pathname;
  // 读取文件
  fs.readFile(filePath, (err, data) => {
    // 判断错误的代号
    if (err) {
      console.log(err);
      response.setHeader("content-type", "text/html;charset=utf-8");
      switch (err.code) {
        case "ENOENT":
          response.statusCode = 404;
          response.end("<h1>404 Not Found</h1>");
        case "EPERM":
          response.statusCode = 403;
          response.end("<h1>403 Forbidden</h1>");
        default:
          response.statusCode = 500;
          response.end("<h1>Internal Server Error</h1>");
      }
      return; // 结束回调函数的运行
    }
    // 设置mime类型
    // 1.获取文件后缀名
    let ext = path.extname(filePath).slice(1);
    console.log(ext);
    // 2.获取对应的类型,并判断是否匹配
    let type = mimes[ext] == null ? "application/octet-stream" : mimes[ext];
    // 3.设置响应头
    response.setHeader("content-type", `${type};charset=utf-8`);
    // 响应文件内容
    response.end(data);
  });
});

// 监听端口 并启动服务
server.listen(9000, () => {
  console.log("服务启动成功");
});
